package com.aps.algorithm.utils;

/**
 * @Author nbZhuozh
 * @Date 2025-09-08  15:59
 **/
public class MathUtils {

    /**
     * 计算阶乘
     *
     * 用于计算基因序列的全排列数量，帮助确定种群大小
     * 例如：有8个工序，则存在8! = 40320种不同的排列组合
     *
     * @param n 要计算阶乘的数
     * @return 阶乘结果，如果n过大可能溢出返回Long.MAX_VALUE
     */
    public static long calFactorial(int n) {
        if (n < 0) {
            throw new IllegalArgumentException("阶乘的参数不能为负数");
        }
        if (n == 0 || n == 1) {
            return 1;
        }

        long result = 1;
        for (int i = 2; i <= n; i++) {
            // 检查是否会溢出
            if (result > Long.MAX_VALUE / i) {
                return Long.MAX_VALUE; // 返回最大值表示溢出
            }
            result *= i;
        }
        return result;
    }


}
